home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / FEBE (Firefox Environment Backup Extension) 5.0 / febe-5.0-fx.xpi / chrome / febe.jar / content / febeCommon.js < prev    next >
Text File  |  2007-06-19  |  44KB  |  1,013 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 5.0
  4. //
  5. //        Common (global) variables
  6.     
  7. var FEBE_GUID = "{4BBDD651-70CF-4821-84F8-2B918CF89CA3}"  // GUID of this extension
  8. var FEBEnsISupportsString = Components.interfaces.nsISupportsString;
  9. var FEBEWINZIPFILENAME = "FEBEzip.exe";
  10. var FEBEWINUNZIPFILENAME = "FEBEunzip.exe";
  11. var FEBENIXZIPFILENAME = "FEBEnixzip";
  12. var FEBENIXUNZIPFILENAME = "FEBEnixunzip";
  13. var FEBEMACZIPFILENAME = "FEBEmaczip";
  14. var FEBEMACUNZIPFILENAME = "FEBEmacunzip";
  15. var FEBEDATAFILE = "febeUserDefinedBuData.dat";
  16.     
  17. // Get pointer to preferences
  18.     try{
  19.         var febePrefs = Components.classes["@mozilla.org/preferences-service;1"]
  20.                     .getService(Components.interfaces.nsIPrefService).getBranch("");
  21.     }catch(e){
  22.         var msg = febeMsg[169];
  23.         febeFatal(e,msg);}
  24.  
  25. function febeGetUnicharPref(prefName) {
  26.     return febePrefs.getComplexValue(prefName, FEBEnsISupportsString).data;
  27. }
  28.  
  29. function febeSetUnicharPref(prefName, prefValue) {
  30.     var supportsString = Components.classes["@mozilla.org/supports-string;1"].createInstance(FEBEnsISupportsString);
  31.     supportsString.data = prefValue;
  32.     febePrefs.setComplexValue(prefName, FEBEnsISupportsString, supportsString);
  33.  
  34.  
  35. window.addEventListener("load",febeSetMsgs,true);
  36.  
  37. // Set global variables
  38.     var febeBUtype = new String();            // "selective" or "profile"
  39.     var febeExBuDir = new String();        // Directory where the results are stored
  40.     var febeBUdate = new Date();            // Date of backup to restore
  41.     var febePathName = new String();        // Holds full path name of various files
  42.     var febeDebugMode = new Boolean(false);// In debug mode?
  43.     var febeExtensionsList = {};            // Array holding extension names
  44.     var febeThemesList = {};                // Array holding theme names
  45.     var febeErrorList = [];                    // Array holding failed items (errors)
  46.     var febeWarningList = [];                // Array holding failed items (warnings)
  47.     var febeETinstall = [];                    // Array of ext/theme objects to install
  48.     var febeMsg = [];                        // Array holding localized strings
  49.     var febeTmpDir = new String();            // nsIFile pointer to temp directory
  50.     var febeDestDir = new String();        // nsIFile pointer used in febeDirCopy()
  51.     var febeSubRootDir = new String();        // Used in febeDirCopy()
  52.     var febeBuSeq = new String();            // FEBE Batch Sequence number
  53.     var FEBEdir = new String();            // Pointer to FEBE extension directory
  54.     var febeZipFile = new String();        // Pointer to "FEBE.zip"
  55.     var febeUnZipFile = new String();        // Pointer to "FEBEunzip.zip"
  56.     var FEBEbg = new String();                // Pointer to "FEBEbg.exe" (background program)
  57.     var febeWin = new String();            // Window object for FEBE windows
  58.     var febeProfDir = new String();        // Full path to profile directory
  59.     var febeProfName = new String();        // Profile name
  60.     var febeVersion = new String();        // Version of this extension (FEBE)
  61.     var febePrName = new String();            // Leafname of file picker file
  62.     var febeBuDesDir = new String();        // Pointer to backup destination directory
  63.     var febeExtExt = new String();            // ".xpi" (extension) or ".jar" (theme)
  64.     var febeBuInProgress = new Boolean(false); // Is the backup running?
  65.     var febeInitialized = new Boolean(false);    // Initalize function run yet?
  66.     var febeUseTimestampedDir = new Boolean(false);// Create timestamped subdirectories?
  67.     var febeMaxDirs = new Number;            // Maximum number of timestamped directories
  68.     var febeClearDestDir = new Boolean(false); // Clear destination directory?
  69.     var febeProfList = [];                    // Array of febeProfileObj objects
  70.     var febePlatform = new Number;            // 1=Windows, 2=*nix, 3=Mac 
  71.     var febePathDelimiter = new String();    // Backslash for Windows, slash for Linux
  72.     var febeNLchar = new String();            // Newline character - Windows: "\r\n", Linux: "\n"
  73.     var febeDisabledCount = new Number;    // Count of disabled extensions
  74.     var includeFEBE = new String();        // Include a copy of FEBE with backup?
  75.     var febeDisablePermChk = new Boolean(false);    // Disable zip/unzip permission check?
  76.     var febeUDBuDone = [];                    // Array of completed User-defined backups
  77.     var febeClipboard = [];                    // Holds alert messages for the clipboard
  78.     var febeIgnoreError = new Boolean(false);    // If true, don't display error message
  79.     var febeReminded = new Boolean(false);    // If true,  dont show backup reminder
  80.     
  81.   // Preferences
  82.     var buExtensions = new Boolean(false);        // Backup extensions?
  83.     var buThemes = new Boolean(false);            // Backup themes?
  84.     var buBookmarks = new Boolean(false);        // Backup bookmarks.html?
  85.     var buPreferences = new Boolean(false);    // Backup prefs.js?
  86.     var buCookies = new Boolean(false);        // Backup cookies.txt?
  87.     var buUserChrome = new Boolean(false);        // Backup userChrome.css?
  88.     var buUserContent = new Boolean(false);    // Backup userContent.css?
  89.     var buUserPwd = new Boolean(false);        // Backup key3.db and signons.txt?
  90.     var buPhishingData = new Boolean(false);    // Backup kf.txt and urlclassifier.sqlite?
  91.     var buSearchPlugins = new Boolean(false);    // Backup searchplungins directory?
  92.     var buBrowserHistory = new Boolean(false);    // Backup history.dat?
  93.     var buFormFillHistory = new Boolean(false);// Backup formhistory.dat?
  94.     var buPermissions = new Boolean(false);    // Backup hostperm.1?
  95.     var buUDBu = new Boolean(false);            // Backup User-defined backups?
  96.     var buProfile = new Boolean(false);        // Backup entire profile?
  97.     var ignoreDisabled = new Boolean(false);    // Ignore disabled extension?
  98.     var febeHideIcons = new Boolean(false);    // Hide statusbar icons?
  99.     var febeVerifyBackups = new Boolean(false);// Verify backups?
  100.     var febeHideHelp = new Boolean(false);        // Hide help icons?
  101.     var febeDispProgress = new Boolean(false);    // Display progress window?
  102.     var febeDispResults = new Boolean(false);    // Display results page?
  103.     var febePlaySounds = new Boolean(false);    // Play sounds?
  104.     var febeSetTimeOutID = new Number;            // ID of setTimeout function
  105.  
  106.   // Backup flags    
  107.     var exBackedUp = new Boolean(false);    // Did extensions backup ok?
  108.     var thBackedUp = new Boolean(false);    // Did themes backup ok?
  109.     var bmBackedUp = new Boolean(false);    // Did bookmarks backup ok?
  110.     var prBackedUp = new Boolean(false);    // Did the preferences backup ok?
  111.     var ckBackedUp = new Boolean(false);    // Did cookies backup ok?
  112.     var chBackedUp = new Boolean(false);    // Did user chrome backup ok?
  113.     var ucBackedUp = new Boolean(false);    // Did user content backup ok?
  114.     var pwBackedUp = new Boolean(false);    // Did passwords backup ok?
  115.     var pdBackedUp = new Boolean(false);    // Did phishing data backup ok?
  116.     var spBackedUp = new Boolean(false);    // Did search plugins backup ok?
  117.     var hsBackedUp = new Boolean(false);    // Did history backup ok?
  118.     var ffBackedUp = new Boolean(false);    // Did form fill history backup ok?
  119.     var pmBackedUp = new Boolean(false);    // Did permissions file backup ok?
  120.     var udBackedUp = new Number;            // Number of User-defined bu's backed up
  121.     var upBackedUp = new Boolean(false);    // Did the user profile backup ok?
  122.     
  123.   // Backup file names
  124.     var bmBuName = new String();    // Bookmarks backup filename
  125.     var prBuName = new String();    // Preferences backup filename
  126.     var ckBuName = new String();    // Cookies backup filename
  127.     var chBuName = new String();    // UserChrome backup filename
  128.     var ucBuName = new String();    // UserContent backup filename
  129.     var pwBuName = new String();    // Password backup filename
  130.     var pdBuName = new String();    // Phishing data backup filename
  131.     var spBuName = new String();    // Search plugins backup filename
  132.     var hsBuName = new String();    // Browser history backup filename
  133.     var ffBuName = new String();    // Form fill history backup filename
  134.     var pmBuName = new String();    // Permissions backup filename
  135.     var udBuName = new String();    // User-defined backup filename
  136.     var upBuName = new String();    // User profile backup filename
  137.     
  138. function febeSetMsgs(){
  139.   // Error messages, prompts, etc.
  140.     var fs = document.getElementById('febe-strings');
  141.     febeMsg.push(fs.getString("msg00"));    // "Destination directory"
  142.     febeMsg.push(fs.getString("msg01"));    // "does not exsist!"
  143.     febeMsg.push(fs.getString("msg02"));    // "Specify valid directory in FEBE options and try again"
  144.     febeMsg.push(fs.getString("msg03"));    // "Extension destination directory not set."
  145.     febeMsg.push(fs.getString("msg04"));    // "Run FEBE options and try again."
  146.     febeMsg.push(fs.getString("msg05"));    // "Select destination directory"
  147.     febeMsg.push(fs.getString("msg06"));    // "Destination profile cannot be the current (active) profile!"
  148.     febeMsg.push(fs.getString("msg07"));    // "Version unknown"
  149.     febeMsg.push(fs.getString("msg08"));    // "Debug mode on ..."
  150.     febeMsg.push(fs.getString("msg09"));    // "Front end batch file can be viewed at: " 
  151.     febeMsg.push(fs.getString("msg10"));    // "Backup batch file can be viewed at: "
  152.     febeMsg.push(fs.getString("msg11"));    // "Log file can be viewed at: "
  153.     febeMsg.push(fs.getString("msg12"));    // "Items processed:"
  154.     febeMsg.push(fs.getString("msg13"));    // "total"
  155.     febeMsg.push(fs.getString("msg14"));    // "Extensions backed up:"
  156.     febeMsg.push(fs.getString("msg15"));    // "Created in:"
  157.     febeMsg.push(fs.getString("msg16"));    // "Themes backed up: "
  158.     febeMsg.push(fs.getString("msg17"));    // "Items skipped:"
  159.     febeMsg.push(fs.getString("msg18"));    // "Could not verify extension/theme with GUID:"
  160.     febeMsg.push(fs.getString("msg19"));    // "Could not find any extensions to backup!"
  161.     febeMsg.push(fs.getString("msg20"));    // "FEBE Results"
  162.     febeMsg.push(fs.getString("msg21"));    // "Backup in progress ..."
  163.     febeMsg.push(fs.getString("msg22"));    // "This window will close when the backup completes."
  164.     febeMsg.push(fs.getString("msg23"));    // "Closing this window manually will abort the backup."
  165.     febeMsg.push(fs.getString("msg24"));    // "Select one or more themes to install"
  166.     febeMsg.push(fs.getString("msg25"));    // "Select one or more extension to install"
  167.     febeMsg.push(fs.getString("msg26"));    // "FEBE processing:"    
  168.     febeMsg.push(fs.getString("msg27"));    // "Bookmarks backed to:"
  169.     febeMsg.push(fs.getString("msg28"));    // "Preferences backed up to:"
  170.     febeMsg.push(fs.getString("msg29"));    // "Cookies backed up to:"
  171.     febeMsg.push(fs.getString("msg30"));    // "Could not backup bookmarks!"
  172.     febeMsg.push(fs.getString("msg31"));    // "Could not backup preferences!"
  173.     febeMsg.push(fs.getString("msg32"));    // "Could not backup cookies!"
  174.     febeMsg.push(fs.getString("msg33"));    // "Select bookmarks file to restore"
  175.     febeMsg.push(fs.getString("msg34"));    // "Select prefrences file to restore"
  176.     febeMsg.push(fs.getString("msg35"));    // "Select cookies file to restore"
  177.     febeMsg.push(fs.getString("msg36"));    // "Warning!"
  178.     febeMsg.push(fs.getString("msg37"));    // "You are about to restore bookmarks dated"
  179.     febeMsg.push(fs.getString("msg38"));    // "You are about to restore preferences dated"
  180.     febeMsg.push(fs.getString("msg39"));    // "You are about to restore cookies dated"
  181.     febeMsg.push(fs.getString("msg40"));    // "Once completed, this cannot be undone."
  182.     febeMsg.push(fs.getString("msg41"));    // "Ok to proceed?"
  183.     febeMsg.push(fs.getString("msg42"));    // "Bookmarks have been restored."
  184.     febeMsg.push(fs.getString("msg43"));    // "Preferences have been restored."
  185.     febeMsg.push(fs.getString("msg44"));    // "Cookies have been restored."
  186.     febeMsg.push(fs.getString("msg45"));    // "Any changes made since that point will be lost."
  187.     febeMsg.push(fs.getString("msg46"));    // "Restore aborted"
  188.     febeMsg.push(fs.getString("msg47"));    // "Cannot find wscript.exe!"
  189.     febeMsg.push(fs.getString("msg48"));    // "Specify path to wscript.exe in FEBE options."
  190.     febeMsg.push(fs.getString("msg49"));    // "Version:"
  191.     febeMsg.push(fs.getString("msg50"));    // "Bookmarks will be restored when Firefox restarts."
  192.     febeMsg.push(fs.getString("msg51"));    // "Restart Firefox now?"    
  193.     febeMsg.push(fs.getString("msg52"));    // "User Chrome backed up to:"
  194.     febeMsg.push(fs.getString("msg53"));    // "User Content backed up to:"
  195.     febeMsg.push(fs.getString("msg54"));    // "Usernames and Passwords backed up to:"
  196.     febeMsg.push(fs.getString("msg55"));    // "Phishing data backed up to:"
  197.     febeMsg.push(fs.getString("msg56"));    // "Search Plugins backed up to:"
  198.     febeMsg.push(fs.getString("msg57"));    // "Browser History backed up to:"
  199.     febeMsg.push(fs.getString("msg58"));    // "Form Fill History backed up to:"
  200.     febeMsg.push(fs.getString("msg59"));    // "Profile backed up to:"
  201.     febeMsg.push(fs.getString("msg60"));    // "Could not backup userChrome!"
  202.     febeMsg.push(fs.getString("msg61"));    // "Could not backup userContent!"
  203.     febeMsg.push(fs.getString("msg62"));    // "Could not backup usernames and passwords!"
  204.     febeMsg.push(fs.getString("msg63"));    // "Could not backup phishing data!"
  205.     febeMsg.push(fs.getString("msg64"));    // "Could not backup search plugins!"
  206.     febeMsg.push(fs.getString("msg65"));    // "Could not backup browser history!"
  207.     febeMsg.push(fs.getString("msg66"));    // "Could not backup form fill history!"
  208.     febeMsg.push(fs.getString("msg67"));    // "Could not backup profile!"
  209.     febeMsg.push(fs.getString("msg68"));    // "You are about to restore userChrome.css dated"
  210.     febeMsg.push(fs.getString("msg69"));    // "You are about to restore userContent.css dated"
  211.     febeMsg.push(fs.getString("msg70"));    // "You are about to restore usernames and passwords dated"
  212.     febeMsg.push(fs.getString("msg71"));    // "You are about to restore phishing data dated"
  213.     febeMsg.push(fs.getString("msg72"));    // "You are about to restore search plugins dated"
  214.     febeMsg.push(fs.getString("msg73"));    // "You are about to restore browser history dated"
  215.     febeMsg.push(fs.getString("msg74"));    // "You are about to restore form fill history dated"
  216.     febeMsg.push(fs.getString("msg75"));    // "You are about to restore a profile dated"
  217.     febeMsg.push(fs.getString("msg76"));    // "Individual batch files located in "
  218.     febeMsg.push(fs.getString("msg77"));    // "Prepairing results page ..."
  219.     febeMsg.push(fs.getString("msg78"));    // "Select userChrome file to restore"
  220.     febeMsg.push(fs.getString("msg79"));    // "User chrome has been restored."
  221.     febeMsg.push(fs.getString("msg80"));    // "Select username-passwords file to restore"
  222.     febeMsg.push(fs.getString("msg81"));    // "Usernames and passwords have been restored."
  223.     febeMsg.push(fs.getString("msg82"));    // "Select phishing data file to restore"
  224.     febeMsg.push(fs.getString("msg83"));    // "Phishing data have been restored."
  225.     febeMsg.push(fs.getString("msg84"));    // "Select search plugins file to restore"
  226.     febeMsg.push(fs.getString("msg85"));    // "Search plugins have been restored."
  227.     febeMsg.push(fs.getString("msg86"));    // "Select browser history file to restore"
  228.     febeMsg.push(fs.getString("msg87"));    // "Browser history has been restored."
  229.     febeMsg.push(fs.getString("msg88"));    // "Select form fill history file to restore"
  230.     febeMsg.push(fs.getString("msg89"));    // "Form fill history has been restored."
  231.     febeMsg.push(fs.getString("msg90"));    // "Select profile to restore"
  232.     febeMsg.push(fs.getString("msg91"));    // "Profile has been restored."
  233.     febeMsg.push(fs.getString("msg92"));    // "Select userContent file to restore"
  234.     febeMsg.push(fs.getString("msg93"));    // "User content has been restored."
  235.     febeMsg.push(fs.getString("msg94"));    // "Usernames and passwords will be restored when Firefox restarts."
  236.     febeMsg.push(fs.getString("msg95"));    // "Username and password restore failed!"
  237.     febeMsg.push(fs.getString("msg96"));    // "Phishing data will be restored when firefox restarts"
  238.     febeMsg.push(fs.getString("msg97"));    // "Search plugins restore failed!"
  239.     febeMsg.push(fs.getString("msg98"));    // "Confirm delete"
  240.     febeMsg.push(fs.getString("msg99"));    // "The backup destination directory contains x1 files and x2 subdirectories."
  241.     febeMsg.push(fs.getString("msg100"));    // "All files will be deleted! (Subdirectories, if any, will not be removed.)"
  242.     febeMsg.push(fs.getString("msg101"));    // "Enter a positive whole number or zero for unlimited."
  243.     febeMsg.push(fs.getString("msg102"));    // "Profile restore failed!"
  244.     febeMsg.push(fs.getString("msg103"));    // "Phishing data restore failed!"
  245.     febeMsg.push(fs.getString("msg104"));    // "Permissions successfuly changed"
  246.     febeMsg.push(fs.getString("msg105"));    // "Could not determine if permissions were changed.  Please set/check manually."
  247.     febeMsg.push(fs.getString("msg106"));    // "Browser history will be restored when Firefox restarts."
  248.     febeMsg.push(fs.getString("msg107"));    // "Does not include %num% disabled extensions."
  249.     febeMsg.push(fs.getString("msg108"));    // "FEBE Results"
  250.     febeMsg.push(fs.getString("msg109"));    // "FEBE Results Report"
  251.     febeMsg.push(fs.getString("msg110"));    // "For the latest information, see the"
  252.     febeMsg.push(fs.getString("msg111"));    // "FEBE homepage."
  253.     febeMsg.push(fs.getString("msg112"));    // "error(s) encountered."
  254.     febeMsg.push(fs.getString("msg113"));    // "-- Not selected --"
  255.     febeMsg.push(fs.getString("msg114"));    // "Next scheduled backup:"
  256.     febeMsg.push(fs.getString("msg115"));    // "Could not backup permissions!"
  257.     febeMsg.push(fs.getString("msg116"));    // "Permissions backed up to:"
  258.     febeMsg.push(fs.getString("msg117"));    // "Select permissions file to restore"
  259.     febeMsg.push(fs.getString("msg118"));    // "You are about to restore permissions dated"
  260.     febeMsg.push(fs.getString("msg119"));    // "Permissions have been restored."
  261.     febeMsg.push(fs.getString("msg120"));    // "%disabled% indicates a user disabled extension."
  262.     febeMsg.push(fs.getString("msg121"));    // "Does not exist"
  263.     febeMsg.push(fs.getString("msg122"));    // "Exists, but empty"
  264.     febeMsg.push(fs.getString("msg123"));    // "Exists with entries"
  265.     febeMsg.push(fs.getString("msg124"));    // "Tmp directory deleted"
  266.     febeMsg.push(fs.getString("msg125"));    // "Could not remove tmp directory!"
  267.     febeMsg.push(fs.getString("msg126"));    // "Clicking 'OK' will reset all FEBE preferences to default values."
  268.     febeMsg.push(fs.getString("msg127"));    // "This cannot be undone."
  269.     febeMsg.push(fs.getString("msg128"));    // "Are you sure you want to proceed?"
  270.     febeMsg.push(fs.getString("msg129"));    // "FEBE preferences have been reset."
  271.     febeMsg.push(fs.getString("msg130"));    // "FEBE tmp directory created."
  272.     febeMsg.push(fs.getString("msg131"));    // "Nothing is selected for backup!  Run FEBE options and select some backup items."
  273.     febeMsg.push(fs.getString("msg132"));    // "warning(s) encountered."
  274.     febeMsg.push(fs.getString("msg133"));    // "Select a file or directory to backup"
  275.     febeMsg.push(fs.getString("msg134"));    // "Select a function:"
  276.     febeMsg.push(fs.getString("msg135"));    // "Select..."
  277.     febeMsg.push(fs.getString("msg136"));    // "Add a new item"
  278.     febeMsg.push(fs.getString("msg137"));    // "Change/View an item"
  279.     febeMsg.push(fs.getString("msg138"));    // "Delete an item"
  280.     febeMsg.push(fs.getString("msg139"));    // "You have transactions pending."
  281.     febeMsg.push(fs.getString("msg140"));    // "Database will NOT be updated!"
  282.     febeMsg.push(fs.getString("msg141"));    // "Click 'OK' to exit anyway, 'Cancel' to return to form."
  283.     febeMsg.push(fs.getString("msg142"));    // "Label cannot be blank"
  284.     febeMsg.push(fs.getString("msg143"));    // "Description cannot be blank"
  285.     febeMsg.push(fs.getString("msg144"));    // "Source cannot be blank"
  286.     febeMsg.push(fs.getString("msg145"));    // "Entry labeled '%key%' already exists ... Choose a different label"
  287.     febeMsg.push(fs.getString("msg146"));    // "Submited ... will be written on exit."
  288.     febeMsg.push(fs.getString("msg147"));    // "User-defined backup"
  289.     febeMsg.push(fs.getString("msg148"));    // "User-defined %description% backed up to: %name%"
  290.     febeMsg.push(fs.getString("msg149"));    // "Database updated"
  291.     febeMsg.push(fs.getString("msg150"));    // "Scheduled backup aborted!"
  292.     febeMsg.push(fs.getString("msg151"));    // "Backup scheduling has been turned off."
  293.     febeMsg.push(fs.getString("msg152"));    // "Use FEBE options to reset."
  294.     febeMsg.push(fs.getString("msg153"));    // "(Not set)"
  295.     febeMsg.push(fs.getString("msg154"));    // "Select FEBE tmp directory"
  296.     febeMsg.push(fs.getString("msg155"));    // "FEBE has determined that this is a new install or update"
  297.     febeMsg.push(fs.getString("msg156"));    // "Please set FEBE options before attempting a backup."
  298.     febeMsg.push(fs.getString("msg157"));    // "If this is an update, you should clear the previous preferences."
  299.     febeMsg.push(fs.getString("msg158"));    // "(FEBE Options > Debug > Misc > 'Clear FEBE preferences')"
  300.     febeMsg.push(fs.getString("msg159"));    // "Select a folder to backup"
  301.     febeMsg.push(fs.getString("msg160"));    // "Select 'File' or 'Folder'"
  302.     febeMsg.push(fs.getString("msg161"));    // "Select User-defined backup to restore"
  303.     febeMsg.push(fs.getString("msg162"));    // "Error occured attempting to rename profile.  Details:"
  304.     febeMsg.push(fs.getString("msg163"));    // "You are about to restore %fname% dated"
  305.     febeMsg.push(fs.getString("msg164"));    // "%fname% has been restored"
  306.     febeMsg.push(fs.getString("msg165"));    // "Please select 'File' or 'Folder' type first."
  307.     febeMsg.push(fs.getString("msg166"));    // "Can't find user-defined backup file %path%"
  308.     febeMsg.push(fs.getString("msg167"));    // "*** Error backing up %description%"
  309.     febeMsg.push(fs.getString("msg168"));    // "Could not copy %sourcefile% to %destdir% as %dName%"
  310.     febeMsg.push(fs.getString("msg169"));    // "A possibly fatal error has occured.    "
  311.     febeMsg.push(fs.getString("msg170"));    // "Restore"
  312.     febeMsg.push(fs.getString("msg171"));    // "Backup reminder!"
  313.     febeMsg.push(fs.getString("msg172"));    // "Last backup was performed over %days% day(s) ago on:"
  314.     febeMsg.push(fs.getString("msg173"));    // "No backup performed)"
  315.     febeMsg.push(fs.getString("msg174"));    // "All user-defined items will be deleted and set to default."
  316.     febeMsg.push(fs.getString("msg175"));    // "Click 'OK' to reset, 'Cancel' to return to form."
  317.     febeMsg.push(fs.getString("msg176"));    // "User-defined data reset to default."
  318.     febeMsg.push(fs.getString("msg177"));    // "If the permissions are set correctly and you continue to get this message,"
  319.     febeMsg.push(fs.getString("msg178"));    // "disable permissions check in 'FEBE Options > Debug > Misc'."
  320.     febeMsg.push(fs.getString("msg179"));    // "Are you sure you want to abort?"
  321.     febeMsg.push(fs.getString("msg180"));    // "by:"
  322.     febeMsg.push(fs.getString("msg181"));    // "FEBE user-defined backup data"
  323.     febeMsg.push(fs.getString("msg182"));    // "FEBE data"
  324.  
  325. }//febeSetMsgs()
  326.  
  327. function febeGetPrefs(){
  328.   // Get/set the preferences
  329.     
  330.     // Get timestamp flag
  331.     var prefName = "extensions.febe.useTimestampedDir";
  332.     if(febePrefs.prefHasUserValue(prefName)){
  333.         febeUseTimestampedDir = febePrefs.getBoolPref(prefName);
  334.     } else {
  335.         febePrefs.setBoolPref(prefName,false);
  336.         febeUseTimestampedDir = false;
  337.     }//if
  338.     
  339.     // Get max number of timestamped directories
  340.     var prefName = "extensions.febe.maxBuDirs";
  341.     if(febePrefs.prefHasUserValue(prefName)){
  342.         febeMaxDirs = febePrefs.getIntPref(prefName);
  343.     } else {
  344.         febePrefs.setIntPref(prefName,0);
  345.         febeMaxDirs = 0;    // Zero means no limit
  346.     }//if
  347.     
  348.     // Get clear directory flag
  349.     var prefName = "extensions.febe.clearDestDir";
  350.     if(febePrefs.prefHasUserValue(prefName)){
  351.         febeClearDestDir = febePrefs.getBoolPref(prefName);
  352.     } else {
  353.         febePrefs.setBoolPref(prefName,false);
  354.         febeClearDestDir = false;
  355.     }//if
  356.     
  357.     // Get backup option flags
  358.     var prefName = "extensions.febe.buType";
  359.     if(febePrefs.prefHasUserValue(prefName)){
  360.         febeBUtype = febePrefs.getCharPref(prefName);
  361.     } else {
  362.         febePrefs.setCharPref(prefName,"selective");
  363.         febeBUtype = "selective";
  364.     }//if
  365.     if(febeBUtype == "selective"){
  366.         buProfile = false;
  367.     }else{
  368.         buProfile = true;
  369.     }//if
  370.     
  371.     var prefName = "extensions.febe.buExtensions";
  372.     if(febePrefs.prefHasUserValue(prefName)){
  373.         buExtensions = febePrefs.getBoolPref(prefName);
  374.     } else {
  375.         febePrefs.setBoolPref(prefName,true);
  376.         buExtensions = true;
  377.     }//if
  378.  
  379.     var prefName = "extensions.febe.buThemes";
  380.     if(febePrefs.prefHasUserValue(prefName)){
  381.         buThemes = febePrefs.getBoolPref(prefName);
  382.     } else {
  383.         febePrefs.setBoolPref(prefName,true);
  384.         buThemes = true;
  385.     }//if
  386.     
  387.     var prefName = "extensions.febe.buBookmarks";
  388.     if(febePrefs.prefHasUserValue(prefName)){
  389.         buBookmarks = febePrefs.getBoolPref(prefName);
  390.     } else {
  391.         febePrefs.setBoolPref(prefName,false);
  392.         buBookmarks = false;
  393.     }//if
  394.  
  395.     var prefName = "extensions.febe.buPreferences";
  396.     if(febePrefs.prefHasUserValue(prefName)){
  397.         buPreferences = febePrefs.getBoolPref(prefName);
  398.     } else {
  399.         febePrefs.setBoolPref(prefName,false);
  400.         buPreferences = false;
  401.     }//if
  402.  
  403.     var prefName = "extensions.febe.buCookies";
  404.     if(febePrefs.prefHasUserValue(prefName)){
  405.         buCookies = febePrefs.getBoolPref(prefName);
  406.     } else {
  407.         febePrefs.setBoolPref(prefName,false);
  408.         buCookies = false;
  409.     }//if
  410.         
  411.     var prefName = "extensions.febe.buUserChrome";
  412.     if(febePrefs.prefHasUserValue(prefName)){
  413.         buUserChrome = febePrefs.getBoolPref(prefName);
  414.     } else {
  415.         febePrefs.setBoolPref(prefName,false);
  416.         buUserChrome = false;
  417.     }//if
  418.     
  419.     var prefName = "extensions.febe.buUserContent";
  420.     if(febePrefs.prefHasUserValue(prefName)){
  421.         buUserContent = febePrefs.getBoolPref(prefName);
  422.     } else {
  423.         febePrefs.setBoolPref(prefName,false);
  424.         buUserContent = false;
  425.     }//if
  426.     
  427.     var prefName = "extensions.febe.buUserPwd";
  428.     if(febePrefs.prefHasUserValue(prefName)){
  429.         buUserPwd = febePrefs.getBoolPref(prefName);
  430.     } else {
  431.         febePrefs.setBoolPref(prefName,false);
  432.         buUserPwd = false;
  433.     }//if
  434.     
  435.     var prefName = "extensions.febe.buPhishingData";
  436.     if(febePrefs.prefHasUserValue(prefName)){
  437.         buPhishingData = febePrefs.getBoolPref(prefName);
  438.     } else {
  439.         febePrefs.setBoolPref(prefName,false);
  440.         buPhishingData = false;
  441.     }//if
  442.     
  443.     var prefName = "extensions.febe.buSearchPlugins";
  444.     if(febePrefs.prefHasUserValue(prefName)){
  445.         buSearchPlugins = febePrefs.getBoolPref(prefName);
  446.     } else {
  447.         febePrefs.setBoolPref(prefName,false);
  448.         buSearchPlugins = false;
  449.     }//if
  450.     
  451.     var prefName = "extensions.febe.buBrowserHistory";
  452.     if(febePrefs.prefHasUserValue(prefName)){
  453.         buBrowserHistory = febePrefs.getBoolPref(prefName);
  454.     } else {
  455.         febePrefs.setBoolPref(prefName,false);
  456.         buBrowserHistory = false;
  457.     }//if
  458.     
  459.     var prefName = "extensions.febe.buFormFillHistory";
  460.     if(febePrefs.prefHasUserValue(prefName)){
  461.         buFormFillHistory = febePrefs.getBoolPref(prefName);
  462.     } else {
  463.         febePrefs.setBoolPref(prefName,false);
  464.         buFormFillHistory = false;
  465.     }//if
  466.     
  467.     var prefName = "extensions.febe.buPermissions";
  468.     if(febePrefs.prefHasUserValue(prefName)){
  469.         buPermissions = febePrefs.getBoolPref(prefName);
  470.     } else {
  471.         febePrefs.setBoolPref(prefName,false);
  472.         buPermissions = false;
  473.     }//if
  474.     
  475.     var prefName = "extensions.febe.buUDBu";
  476.     if(febePrefs.prefHasUserValue(prefName)){
  477.         buUDBu = febePrefs.getBoolPref(prefName);
  478.     } else {
  479.         febePrefs.setBoolPref(prefName,false);
  480.         buUDBu = false;
  481.     }//if
  482.     
  483.     var prefName = "extensions.febe.ignoreDisabled";
  484.     if(febePrefs.prefHasUserValue(prefName)){
  485.         ignoreDisabled = febePrefs.getBoolPref(prefName);
  486.     } else {
  487.         febePrefs.setBoolPref(prefName,false);
  488.         ignoreDisabled = false;
  489.     }//if
  490.     
  491.   // Get debug mode
  492.     var prefName = "extensions.febe.debugMode";
  493.     if(febePrefs.prefHasUserValue(prefName)){
  494.         febeDebugMode = febePrefs.getBoolPref(prefName);
  495.     } else {
  496.         febePrefs.setBoolPref(prefName,false);
  497.         febeDebugMode = false;
  498.     }//if
  499.     
  500.   // Verify backups?
  501.     var prefName = "extensions.febe.verifyBackups";
  502.     if(febePrefs.prefHasUserValue(prefName)){
  503.         febeVerifyBackups = febePrefs.getBoolPref(prefName);
  504.     } else {
  505.         febePrefs.setBoolPref(prefName,false);
  506.         febeVerifyBackups = false;
  507.     }//if
  508.     
  509.     // Play sounds?
  510.     var prefName = "extensions.febe.playSounds";
  511.     if(febePrefs.prefHasUserValue(prefName)){
  512.         febePlaySounds = febePrefs.getBoolPref(prefName);
  513.     } else {
  514.         febePrefs.setBoolPref(prefName,false);
  515.         febePlaySounds = false;
  516.     }//if
  517.     
  518.     // Hide help icons?
  519.     var prefName = "extensions.febe.hidehelp";
  520.     if(febePrefs.prefHasUserValue(prefName)){
  521.         febeHideHelp = febePrefs.getBoolPref(prefName);
  522.     } else {
  523.         febePrefs.setBoolPref(prefName,false);
  524.         febeHideHelp = false;
  525.     }//if
  526.     febeHideHelpIcons();
  527.     
  528.     // Display progress window?
  529.     var prefName = "extensions.febe.displayprogresswin";
  530.     if(febePrefs.prefHasUserValue(prefName)){
  531.         febeDispProgress = febePrefs.getBoolPref(prefName);
  532.     } else {
  533.         febePrefs.setBoolPref(prefName,true);
  534.         febeDispProgress = true;
  535.     }//if
  536.  
  537.     // Display results page?
  538.     var prefName = "extensions.febe.displayresultspage";
  539.     if(febePrefs.prefHasUserValue(prefName)){
  540.         febeDispResults = febePrefs.getBoolPref(prefName);
  541.     } else {
  542.         febePrefs.setBoolPref(prefName,true);
  543.         febeDispResults = true;
  544.     }//if
  545.     
  546.     // Include a copy of FEBE with backup?
  547.     var prefName = "extensions.febe.includefebe";
  548.     if(febePrefs.prefHasUserValue(prefName)){
  549.         includeFEBE = febePrefs.getBoolPref(prefName);
  550.     } else {
  551.         febePrefs.setBoolPref(prefName,false);
  552.         includeFEBE = false;
  553.     }//if
  554.     
  555.     // Disable permission check?
  556.     var prefName = "extensions.febe.disablepermissioncheck";
  557.     if(febePrefs.prefHasUserValue(prefName)){
  558.         febeDisablePermChk = febePrefs.getBoolPref(prefName);
  559.     } else {
  560.         febePrefs.setBoolPref(prefName,false);
  561.         febeDisablePermChk = false;
  562.     }//if
  563.     
  564.     // Set reminder days if empty
  565.     var prefName = "extensions.febe.reminderdays";
  566.     if(!febePrefs.prefHasUserValue(prefName)){febePrefs.setIntPref(prefName,0);}
  567.     
  568.     // Set HTML text orientation
  569.     var prefName = "extensions.febe.orientation";
  570.     if(!febePrefs.prefHasUserValue(prefName)){febePrefs.setCharPref(prefName,"ltr");}
  571.     
  572.     
  573.     // Get febe tmp directory information
  574.     var td = Components.classes["@mozilla.org/file/directory_service;1"]
  575.                  .getService(Components.interfaces.nsIProperties)
  576.                  .get("TmpD", Components.interfaces.nsIFile);
  577.         td.append("febe.tmp");
  578.         
  579.     var prefName = "extensions.febe.tmpDefaultDirectory";
  580.     var dflt = td.path;
  581.     febeInitPref(prefName, dflt);
  582.     
  583.     var prefName = "extensions.febe.tmpSpecifyDirectory";
  584.     var dflt = febeMsg[153];
  585.     febeInitPref(prefName, dflt);
  586.     
  587.     var prefName = "extensions.febe.tmpDirType";
  588.     var dflt = "Default";
  589.     febeInitPref(prefName, dflt);
  590.     
  591.     var tmpDirType = febePrefs.getCharPref(prefName);
  592.     switch(tmpDirType){
  593.         case "Default":        var whichPref = "extensions.febe.tmpDefaultDirectory";break;
  594.         case "Specified":     var whichPref = "extensions.febe.tmpSpecifyDirectory";break;
  595.         default:            var whichPref = "extensions.febe.tmpDefaultDirectory";break;
  596.     }//switch
  597.     var td = febeGetUnicharPref(whichPref);
  598.     var prefName = "extensions.febe.tmpDirectory";
  599.     febeSetUnicharPref(prefName,td);
  600.     return true;
  601. }//febeGetPrefs()
  602.  
  603. function febeInitPref(prefName, dflt){
  604.   // Set a preference to default if needed
  605.     if(!febePrefs.prefHasUserValue(prefName)){        
  606.         febeSetUnicharPref(prefName,dflt);
  607.     }else if(febeGetUnicharPref(prefName) == ""){
  608.         febeSetUnicharPref(prefName,dflt);
  609.     }//if
  610. //alert(prefName+"\n["+febeGetUnicharPref(prefName)+"]")
  611.     return true;
  612. }//febeInitPref()
  613.  
  614. function febeHelp(helpIndex){
  615.     var helpFile = "chrome://febe/content/febeHelp_"+helpIndex+".xul"
  616.     var helpWin = window.open(helpFile, "FEBE Help", "chrome,alwaysRaised,centerscreen,resizable");
  617.     return true;
  618. }//febeHelp()
  619.  
  620. // Object declarations
  621. function febeExtObj(Name, Path, Icon, Home, guid, verified){
  622.     this.Name = new String(Name);
  623.     this.Path = new String(Path); 
  624.     this.Icon = new String(Icon); 
  625.     this.Home = new String(Home); 
  626.     this.guid = new String(guid); 
  627.     this.verified = new Boolean(verified);
  628.     return true;
  629. }//febeExtObj
  630.  
  631. function febeProfileObj(Name, Path){
  632.     this.Name = Name;
  633.     this.Path = Path;    
  634.     return true;
  635. }//febeProfileObj object
  636.  
  637. function febeUDBuDoneObj(Description, Name){
  638.     this.Description = Description;
  639.     this.Name = Name;
  640.     return true;
  641. }//febeUDBuDoneObj()
  642.  
  643. function febeSetTimeoutObj(PID,Process){
  644.     this.PID = PID;
  645.     this.Process = Process;
  646.     return true;
  647. }//febeSetTimeoutObj
  648.  
  649. function febeGetPlatform(){
  650.     var platform = navigator.platform.toLowerCase();
  651.     if(platform.indexOf("win") != -1){febePlatform = 1;}
  652.     if(platform.indexOf("linux") != -1){febePlatform = 2;}
  653.     if(platform.indexOf("unix") != -1){febePlatform = 2;}
  654.     if(platform.indexOf("darwin") != -1){febePlatform = 3;}
  655.     if(platform.indexOf("macintel") != -1){febePlatform = 3;}
  656.     if(platform.indexOf("macppc") != -1){febePlatform = 3;}
  657.     
  658. //febePlatform = 2;
  659.     var OS = "???";
  660.     switch (febePlatform) {
  661.         case 1: febePathDelimiter = "\\"; OS = "Windows"; break;
  662.         case 2: febePathDelimiter = "/" ; OS = "Unix/Linux"; break;
  663.         case 3: febePathDelimiter = "/" ; OS = "Mac (freeBSD)"; break;
  664.         default: febePlatform = -1; return false;
  665.     }//switch
  666.     if(document.getElementById("febePlatformLableID")){
  667.         document.getElementById("febePlatformID").value = navigator.platform;
  668.         document.getElementById("febeOsID").value= OS;
  669.     }//if
  670.     if(document.getElementById("febeInstallPath")){
  671.         FEBEdir = Components.classes["@mozilla.org/extensions/manager;1"]
  672.               .getService(Components.interfaces.nsIExtensionManager)
  673.               .getInstallLocation(FEBE_GUID)
  674.               .getItemLocation(FEBE_GUID);
  675.         document.getElementById("febeInstallPath").value = FEBEdir.path;
  676.     }//if
  677.     return febePlatform;
  678. }//febeGetPlatform()
  679.  
  680. function getFebeVersion() {
  681.     var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
  682.     var ext = null;
  683.     if (em.getItemForID){
  684.         ext = em.getItemForID(FEBE_GUID);
  685.     }else{
  686.         ext = em.getItemList(FEBE_GUID, null, {})[0];
  687.     }//if
  688.     return ext.version;
  689. }//getFebeVersion()
  690.  
  691. function setFebeVersion(){
  692.     febeSetMsgs();
  693.     var version = getFebeVersion();
  694.     document.getElementById("febeVersionID").value = febeMsg[49]+" "+version;
  695.     version = Components.classes['@mozilla.org/xre/app-info;1']
  696.         .getService(Components.interfaces.nsIXULAppInfo).version;
  697.     if(document.getElementById("febeFxVersionID")){
  698.         document.getElementById("febeFxVersionID").value = version;
  699.     }//if
  700.     return true;
  701. }//setFebeVersion()
  702.  
  703. function febeValidateMaxDirs(){
  704.     var maxDirs = document.getElementById("maxBuDirsID").value;
  705.     if(isNaN(maxDirs)){
  706.         var w = this.window;
  707.         febeAlert(febeMsg[101]);
  708.         w.focus();
  709.         document.getElementById("maxBuDirsID").focus();
  710.         document.getElementById("maxBuDirsID").select();
  711.         return false;
  712.     }//if
  713.     document.getElementById("maxBuDirsID").value = parseInt(maxDirs);
  714.     return true;
  715. }//febeValidateMaxDirs()
  716.     
  717. function febeOpenLink(URL){
  718.     if(!URL){return;}
  719.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  720.            .getService(Components.interfaces.nsIWindowMediator);
  721.     var win = wm.getMostRecentWindow("navigator:browser");
  722.     var febeGetBrowser = win.getBrowser();
  723.     var currBlank = (febeGetBrowser &&
  724.     (febeGetBrowser.mCurrentTab.linkedBrowser &&
  725.     (febeGetBrowser.mCurrentTab.linkedBrowser.contentDocument.location == "about:blank")) ||
  726.     (!febeGetBrowser.mCurrentTab.linkedBrowser &&
  727.     (febeGetBrowser.mCurrentTab.label == "(Untitled)")));
  728.     if (currBlank)
  729.         {
  730.             var resultsWindow = win.loadURI(URL);
  731.         } else {
  732.             var resultsWindow = win.openNewTabWith(URL, this.docURL, null, null);
  733.     }//if
  734.     return true;
  735. }//febeOpenLink()
  736.  
  737. function febeHideHelpIcons(){
  738.     var prefName = "extensions.febe.hidehelp";
  739.     febeHideHelp = febePrefs.getBoolPref(prefName);
  740.     var c = "helpButton";
  741.     if(febeHideHelp){c = "none";}
  742.     for(var i=1; i<25; i++){
  743.         var seq = String(i);
  744.         if(i<10){seq = "0".concat(seq);}
  745.         var id = "febeHelp".concat(seq);
  746.         try{    
  747.             document.getElementById(id).setAttribute("class",c) ;
  748.         }catch(e){;}
  749.     }
  750.     return true;
  751. }//febeHideHelpIcons()    
  752.  
  753. function febeOptions(aPaneID){
  754.     window.openDialog('chrome://febe/content/febeOptions.xul', 'FEBE Options', 'chrome,titlebar,toolbar,centerscreen,resizable');    
  755. }//febeOptions()
  756.  
  757. function febeAlert(message){
  758.     window.openDialog("chrome://febe/content/febeAlert.xul", "FEBE Alert", "chrome,modal,dialog=yes,alwaysRaised,centerscreen,resizable",message);    
  759.     return true;
  760. }//febeAlert()
  761.  
  762. function febeConfirm(message){
  763.     window.openDialog("chrome://febe/content/febeConfirm.xul", "FEBE Confirm", "chrome,modal,dialog=yes,alwaysRaised,centerscreen,resizable",message);    
  764.     var prefName = "extensions.febe.confirm";
  765.     var OK = febePrefs.getBoolPref(prefName);
  766.     return OK;
  767. }//febeConfirm()
  768.  
  769. function febeError(message){
  770.     window.openDialog("chrome://febe/content/febeError.xul", "FEBE Error", "chrome,modal,dialog=yes,alwaysRaised,centerscreen,resizable",message);    
  771.     return true;
  772. }//febeAlert()
  773.  
  774. function febeConfirmOK(){
  775.     var prefName = "extensions.febe.confirm";
  776.     febePrefs.setBoolPref(prefName,true);
  777.     return true;
  778. }//febeConfirmOK()
  779.  
  780. function febeConfirmCancel(){
  781.     var prefName = "extensions.febe.confirm";
  782.     febePrefs.setBoolPref(prefName,false);
  783.     return true;
  784. }//febeConfirmOK()
  785.  
  786. function febeSetAlertMsg(){
  787.     febeSetConfirmMsg();
  788.     return true;
  789. }//febeSetAlertMsg()
  790.     
  791. function febeSetConfirmMsg(){
  792.     // If the message contains a style, it must be the first part of the message (one style per line, if needed)
  793.     var tmp = window.arguments[0]+"   \n\n";
  794.     var msg = {};
  795.     var i = 0;
  796.     while(true){    // Break it into an array
  797.         var item = new febeAlertObj();
  798.         var p = tmp.indexOf("\n");
  799.         if(p == -1){break;}
  800.         item.Style = "font-family: arial; font-size: 12pt; font-weight: normal; color: purple";  // Default style
  801.         var ps1 = tmp.indexOf("<style>");
  802.         if(ps1 == 0){    
  803.             var ps2 = tmp.indexOf("</style>");
  804.             if(ps2 != -1){
  805.                 item.Style = tmp.substr(7,ps2-7);            // "7" equals the length of "<style>"
  806.                 tmp = tmp.replace(tmp.substr(0,ps2+8),"");    // Remove the style
  807.                 p = tmp.indexOf("\n");
  808.             }//if
  809.         }//if
  810.         item.Text = tmp.substr(0,p);
  811.         msg[i] = item;
  812.         i++;
  813.         tmp = tmp.substr(p+1);    
  814.     }//while
  815.     febeClipboard = [];
  816.     var msgBox = document.getElementById("febeMsgBox");
  817.     for(var i in msg){
  818.         var desc = document.createElement("description");
  819.         desc.setAttribute("value",msg[i].Text);
  820.         desc.setAttribute("style",msg[i].Style);
  821.         msgBox.appendChild(desc);
  822.         if(febeDebugMode){febeClipboard.push(msg[i].Text);}
  823.     }//for
  824.  
  825.     //if(document.getElementById("febeAlertWindow")){
  826.         var prefName = "extensions.febe.debugMode";
  827.         if(febePrefs.prefHasUserValue(prefName)){
  828.             febeDebugMode = febePrefs.getBoolPref(prefName);
  829.         } else {
  830.             febeDebugMode = false;
  831.         }//if
  832.         febeDebugMode = febePrefs.getBoolPref(prefName);
  833.         document.documentElement.getButton("extra1").hidden = !febeDebugMode;
  834.     //}//if
  835.     sizeToContent();
  836.     
  837.     var w = window.innerWidth
  838.     var padding = w*0.15    // Add some padding it insure all text displays with no scroll bar
  839.     window.resizeBy(padding,0);
  840.     febePlaySound("alert");
  841.     return true;
  842. }//febeSetConfirmMsg()
  843.  
  844. function febeCopyToClipboard(){
  845.   // Copy the contents of a febeAlert, febeConfirm, or febeError box to the system clipboard
  846.     var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"] 
  847.         .getService(Components.interfaces.nsIClipboardHelper);
  848.     gClipboardHelper.copyString(febeClipboard.join("\n"));
  849.     return true;
  850. }//febeCopyToClipboard()
  851.  
  852. function febeAlertObj(Text,Style){
  853.     this.Text = Text;
  854.     this.Style = Style;
  855.     return true;
  856. }//febeAlertObj()
  857.  
  858. function febePlaySound(which){
  859.     var prefName = "extensions.febe.playSounds";
  860.     if(febePrefs.prefHasUserValue(prefName)){
  861.         febePlaySounds = febePrefs.getBoolPref(prefName);
  862.     } else {
  863.         febePrefs.setBoolPref(prefName,false);
  864.         febePlaySounds = false;
  865.     }//if
  866.     if(febePlaySounds == false){return;}
  867.     var gSound = Components.classes["@mozilla.org/sound;1"].createInstance(Components.interfaces.nsISound);
  868.     var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  869.     var soundURL = "chrome://febe/content/sounds/"+which+".wav";
  870.     var url = ioService.newURI(soundURL, null, null);
  871.     gSound.init();
  872.     gSound.play(url);
  873.     return true;
  874. }//febePlaySound()
  875.  
  876. function febeGetTmpDirectory(create_flag){
  877.   // Create a tmp directory (create_flag) and/or set a nsI pointer it
  878.     var prefName = "extensions.febe.tmpDirectory";
  879.     if(!febePrefs.prefHasUserValue(prefName)){febeGetPrefs();}
  880.     var tmpdir = febeGetUnicharPref(prefName);
  881.     
  882.     febeTmpDir = Components.classes["@mozilla.org/file/local;1"]
  883.                      .createInstance(Components.interfaces.nsILocalFile);
  884.     febeTmpDir.initWithPath(tmpdir);
  885.     //febeTmpDir.append("febe.tmp");
  886.     if (!(febeTmpDir.exists() && febeTmpDir.isDirectory())){
  887.         if(create_flag == true){
  888.             febeTmpDir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
  889.         }//if
  890.     }//if
  891.     return true;
  892. }//febeGetTmpDirectory()
  893.  
  894. function febeParent(pathname){
  895.   // Return the parent of pathname.  Ex:
  896.   // If pathname is "C:\Documents and Settings\Owner\My Documents\some dir",
  897.   // the function will return "C:\Documents and Settings\Owner\My Documents"
  898.   
  899.     var file = Components.classes["@mozilla.org/file/local;1"]
  900.                .createInstance(Components.interfaces.nsILocalFile);
  901.     file.initWithPath(pathname);
  902.     return file.parent.path;
  903. }//febeParent()
  904.  
  905. function febeLeafname(pathname){
  906.   // Return the leafname of pathname.  Ex:
  907.   // If pathname is "C:\Documents and Settings\Owner\My Documents\some dir",
  908.   // the function will return "some dir"
  909.   
  910.     var file = Components.classes["@mozilla.org/file/local;1"]
  911.                .createInstance(Components.interfaces.nsILocalFile);
  912.     file.initWithPath(pathname);
  913.     return file.leafName;
  914. }//febeLeafname()
  915.  
  916. function febePause(millis){
  917.   // Pause for (millis) milliseconds
  918.     var date = new Date();
  919.     var curDate = null;
  920.     
  921.     do {curDate = new Date();}
  922.         while(curDate-date < millis);
  923.     return true;
  924. }//febePause() 
  925.  
  926. function febeUnique(nsiPath,basename){
  927.   // Return a unique filname in folder nsiPath with basename of basename
  928.     var destDir = nsiPath.clone();
  929.     destDir.append(basename);
  930.     destDir.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0755);
  931.     var unique = destDir.leafName;
  932.     return unique;
  933. }//febeUnique()
  934.  
  935. function febeWrap(str,len){    
  936.   // Return a string wrapped at len characters max per line
  937.     var tmpA = str.split(" ");
  938.     var returnVal="";
  939.     var tmp = "";
  940.     var skip = new Boolean(false);
  941.     for(var i = 0; i < tmpA.length; i++){
  942.         tmp += tmpA[i]+" ";
  943.         if(tmp.length >= len){
  944.             returnVal +="\n"+tmpA[i]+" ";
  945.             tmp = "";
  946.             i--;
  947.             skip = true;
  948.         }else{
  949.             if(skip == false){returnVal += tmpA[i]+" ";}
  950.             skip = false;
  951.         }//if
  952.     }//for
  953.     return returnVal;
  954. }//function febeWrap()
  955.  
  956. function febeFatal(err,msg){
  957. //alert("febeIgnoreError: "+febeIgnoreError)
  958.     if(febeIgnoreError == true){
  959.         febeIgnoreError = false;    // Reset
  960.         return true;
  961.     }//if
  962.   // Display fatal errors
  963.     var style = "<style>color: black;font-size: 8pt;</style>";
  964.     var tmp = febeWrap(err.toString(),100);
  965.     tmp = tmp.replace(/\n/g,"\n"+style);
  966.     tmp = style + tmp;
  967.     tmp +="\n\n";
  968.     var ptSize = 12;
  969.     if(msg.length > 100){ptSize = 8;}
  970.     style = "<style>color: red;font-size: "+ptSize+"pt;</style>";
  971.     msg = msg.replace(/\n/g,"\n"+style);
  972.     tmp += style+msg;
  973.     febeError(tmp);
  974.     return true;
  975. }//febeFatal()
  976.  
  977. function febeDisplayLastBU(){
  978.     var prefName = "extensions.febe.lastbackup";
  979.     if(febePrefs.prefHasUserValue(prefName)){
  980.         var tmp = febePrefs.getCharPref(prefName);
  981.         tmp = febeLocalizedDate(tmp);
  982.     } else {
  983.         var tmp = febeMsg[173];
  984.     }//if
  985.     document.getElementById("febeLastBU").value = tmp;
  986.     return true;
  987. }//febeDisplayLastBU()
  988.  
  989. function febeLocalizedDate(aDate){
  990.     var lDate = new Date(aDate)
  991.     return lDate.toLocaleDateString()+" "+lDate.toLocaleTimeString();
  992. }//febeLocalizedDate()
  993.  
  994. function febeMakeExecutable(fileName){
  995.   // Set execute permission on fileName
  996.     if(febePlatform == 1){return true;}    // Ignore Windows platform
  997.     var file = Components.classes["@mozilla.org/file/local;1"]
  998.             .createInstance(Components.interfaces.nsILocalFile);    
  999.     file.initWithPath("/");
  1000.     file.append("bin");
  1001.     file.append("chmod");
  1002.     var process = Components.classes["@mozilla.org/process/util;1"]
  1003.                         .createInstance(Components.interfaces.nsIProcess);
  1004.     process.init(file);
  1005.  
  1006.     var argv = ["0755",fileName];
  1007.     process.run(true, argv, argv.length);    
  1008.     return true;
  1009. }//febeMakeExecutable()
  1010.  
  1011. //alert("febeCommon.js loaded");
  1012.